package com.alibaba.csp.sentinel.dashboard.auth.jwt;

import org.springframework.lang.NonNull;

/**
 * 用途描述：保存Token映射信息
 *
 * @author YangLong
 * @version V1.0
 * @since 2024/2/26
 */
public interface TokenStore {

    /**
     * 保存token
     *
     * @param jwtId  id
     * @param jwt    token
     * @param expire 有效期，毫秒
     */
    void storeToken(String jwtId, String jwt, long expire);

    /**
     * 保存token和用户映射关系
     *
     * @param jwtId    id
     * @param authUser 用户信息
     * @param expire   有效期，毫秒
     */
    void storeTokenUserMapping(String jwtId, JwtUser authUser, long expire);

    /**
     * 保存用户和token映射关系
     *
     * @param userId 用户id
     * @param jwtId  token id
     * @param expire 有效期，毫秒
     */
    void storeUserTokenMapping(String userId, String jwtId, long expire);

    /**
     * 读取token
     *
     * @param jwtId token id
     * @return token
     */
    String readToken(String jwtId);

    /**
     * 读取用户
     *
     * @param jwtId token id
     * @return 用户信息
     */
    @NonNull
    JwtUser readUser(@NonNull String jwtId);

    /**
     * 读取token id
     *
     * @param userId 用户id
     * @return token id or null
     */
    String readTokenId(String userId);
}
